LORA相关使用配置

您所在的位置:网站首页 lora 频率 调整 LORA相关使用配置

LORA相关使用配置

2023-08-07 03:50| 来源: 网络整理| 查看: 265

一、E22-230T22S介绍 我使用的是成都亿佰特电子科技有限公司的E22-230T22S LoRa无线模块,模块基于SEMTECH公司SX1262射频芯片的无线串口模块(UART),具有多种传输方式,工作在220.125-236.125频段(默认230.125MHz),LoRa扩频技术,TTL电平输出,兼容3.3V与5V得IO口电压。

1.1工作参数 在这里插入图片描述

这里的电源最好是5V供电,5V一定是非常纯净,硬件设计时,多并上几个滤波电容。

1.2工作模式 在这里插入图片描述 1.3寄存器描述 主要配置几个寄存器就可以,具体配置寄存器的位需参考使用说明书。 在这里插入图片描述 1.4指令格式 在这里插入图片描述 二、程序 由于只需要通过串口即可对LoRa模块进行配置和发送数据。所以写程序的步骤如下:

第一步: 配置串口相关配置(管脚、初始化、中断) 中断服务函数里写相关应答头要操作的数据;

//接收缓冲区容量 #define USART3_RX_BUFF_SIZEMAX 256 #define USART3_TX_BUFF_SIZEMAX 256 //USART设备控制结构体 typedef struct { u32 BaudRate; //波特率 u32 R_Idx; u8 RxBuf[USART3_RX_BUFF_SIZEMAX]; u8 TxBuf[USART3_TX_BUFF_SIZEMAX]; u8 data_length; u8 Get_length; } USART3_STRUCT; /**************************************************************************** * 名 称:void USART3_GPIO_Init(void) * 功 能:串口引脚初始化 * 入口参数:无 * 出口参数:无 * 说 明:无 ****************************************************************************/ void USART3_GPIO_Init(void) //串口引脚初始化 { GPIO_InitTypeDef GPIO_InitStructure; //串口引脚结构 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);//串口引脚分配时钟 //配置串口 Tx (PB.10) 为复用推挽输出 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10; //串口发送引脚 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //复用推挽输出 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz; //频率2MHz : 115200足够 GPIO_Init(GPIOB, &GPIO_InitStructure); //初始化引脚 // 配置串口 Rx (PB.11) 为浮空输入 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11; //串口接收引脚 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;//浮空输入 GPIO_Init(GPIOB, &GPIO_InitStructure); //初始化引脚 } /**************************************************************************** * 名 称:void USART3_Init(void) * 功 能:串口初始化 * 入口参数:无 * 出口参数:无 * 说 明:无 ****************************************************************************/ void USART3_Init(u32 BaudRate) { USART_InitTypeDef UART_InitStructure; //串口结构 RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART3, ENABLE); //串口分配时钟 USART3_Real.BaudRate = BaudRate; //波特率 //串口初始化 UART_InitStructure.USART_BaudRate= USART3_Real.BaudRate;//波特率 UART_InitStructure.USART_WordLength= USART_WordLength_8b;//数据位8bit UART_InitStructure.USART_StopBits= USART_StopBits_1;//停止位个数 UART_InitStructure.USART_Parity = USART_Parity_No ; //不进行奇偶效验 UART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None; //RTS和CTS使能(None不使用) UART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;//发送和接收使能 USART_Init(USART3, &UART_InitStructure); //初始化串口 } /**************************************************************************** * 名 称:void USART3_NVIC_Init(void) * 功 能:串口中断向量表初始化 * 入口参数:无 * 出口参数:无 * 说 明:无 ****************************************************************************/ void USART3_NVIC_Init(void) { NVIC_InitTypeDef NVIC_InitStructure; //中断控制器变量 NVIC_InitStructure.NVIC_IRQChannel = USART3_IRQn;//设置中断通道 NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;//主优先级设置 NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2; //设置优先级 NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //打开串口中断 NVIC_Init(&NVIC_InitStructure); //初始化中断向量表 } /**************************************************************************** * 名 称:void USART3_Config(void) * 功 能:串口设置 * 入口参数:无 * 出口参数:无 * 说 明:默认为包数据接收 ****************************************************************************/ void USART3_Config(void) { USART3_Init(9600); //串口初始化 USART3_GPIO_Init(); //串口引脚初始化 USART3_NVIC_Init(); //中断初始化 USART_ClearITPendingBit(USART3, USART_IT_RXNE); //清接收标志 USART_ITConfig(USART3, USART_IT_RXNE, ENABLE); //开启接收中断 USART_Cmd(USART3, ENABLE); //使能串口外设 } /**************************************************************************** * 名 称:void USART3_SendString(u8* Data, u32 Len) * 功 能:多字符输出 * 入口参数:Data 输出的单字符数据 Len 字符个数 * 出口参数:无 * 说 明:无 ****************************************************************************/ void USART3_SendString(u8* Data, u32 Len) { u32 i=0; for(i=0; i //串口引脚分配时钟 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE); //配置PC0,PC1为输出模式 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1; //M0,M1引脚 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //输出模式 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz; //频率2MHz GPIO_Init(GPIOC, &GPIO_InitStructure); //初始化引脚 GPIO_SetBits(GPIOC,GPIO_Pin_1); GPIO_SetBits(GPIOC,GPIO_Pin_0); //配置PC3为输入模式 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3; //AUX引脚 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; //输入模式 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz; //频率2MHz GPIO_Init(GPIOC, &GPIO_InitStructure); //初始化引脚 } /**************************************************************************** * 名 称:void Lora_Write_REG(u8 Begin_Addr, u8 length, u8 ADDH, u8 ADDL, u8 NETID, u8 REG0, u8 REG1, u8 REG2, u8 REG3) * 功 能:LORA模块写多个寄存器 * 入口参数: * Begin_Addr:开始地址; length:要写的数据长度 * ADDH:高地址;ADDL:低地址;NETID:网络地址; * REG0, REG1, REG2, REG3:寄存器 * 出口参数:无 * 说 明:无 ****************************************************************************/ void Lora_Write_REG(u8 Begin_Addr, u8 length, u8 ADDH, u8 ADDL, u8 NETID, u8 REG0, u8 REG1, u8 REG2, u8 REG3) { USART3_Real.TxBuf[0] = 0xC0; //设置数据头 USART3_Real.TxBuf[1] = Begin_Addr; USART3_Real.TxBuf[2] = length; USART3_Real.TxBuf[3] = ADDH; USART3_Real.TxBuf[4] = ADDL; USART3_Real.TxBuf[5] = NETID; USART3_Real.TxBuf[6] = REG0; //配置串口速率,校验位、无线空中速率 USART3_Real.TxBuf[7] = REG1; //配置分包长度与发射功率 USART3_Real.TxBuf[8] = REG2; //信道控制 USART3_Real.TxBuf[9] = REG3; //配置传输方式等 USART3_SendString(USART3_Real.TxBuf, length+3); // Length指的是length后面参数的总长,所以要加上前面的参数头 } /**************************************************************************** * 名 称:void Lora_Read_REG(u8 Begin_Addr, u8 length) * 功 能:读LORA模块的寄存器 * 入口参数: * Begin_Addr:开始地址; length:要写的数据长度 * 出口参数:无 * 说 明:无 ****************************************************************************/ void Lora_Read_REG(u8 Begin_Addr, u8 length) { USART3_Real.TxBuf[0] = 0xC1; USART3_Real.TxBuf[1] = Begin_Addr; USART3_Real.TxBuf[2] = length; USART3_SendString(USART3_Real.TxBuf, 3); } /**************************************************************************** * 名 称:void Lora_Mode(u8 mode) * 功 能:配置LORA模块的工作模式 * 入口参数: * mode:模式 * 出口参数:无 * 说 明:无 ****************************************************************************/ void Lora_Mode(u8 mode) { OS_ERR err; switch(mode) { case 0x00: //传输模式 GPIO_ResetBits(GPIOC,GPIO_Pin_1); GPIO_ResetBits(GPIOC,GPIO_Pin_0); break; case 0x01://WOR模式 GPIO_ResetBits(GPIOC,GPIO_Pin_1); GPIO_SetBits(GPIOC,GPIO_Pin_0); break; case 0x02://配置模式 GPIO_SetBits(GPIOC,GPIO_Pin_1); GPIO_ResetBits(GPIOC,GPIO_Pin_0); break; case 0x03:深度休眠模式 GPIO_SetBits(GPIOC,GPIO_Pin_1); GPIO_SetBits(GPIOC,GPIO_Pin_0); break; } //等待AUX脚变为低电平(说明模式切换完成) while(GPIO_ReadInputBits(GPIOC,GPIO_Pin_3) == 0) Delay_ms(7); }

第三步: 进行工作参数设置 包括,两个模块地址,发送数据包大小、波特率、功率大小等,参照相关寄存器设置。; 模式之间切换要延时,厂商的技术人员推荐至少要2s,亲测1s也可以。 Lora_write(0x00, 0x07, 0x00, 0x01, 0x00, 0x66, 0x00,0x00, 0x40); 两个LORA模块,信道一定要一样,然后各自发数据和收数据,只要配置串口中断即可。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3